function curry (fn) { // 接受一个函数作为参数
  // console.log(fn.length); fn.length 就是这个函数的参数的长度
  let judge = (...args) => {
    // args此时是一个数组 判断这个数组的长度是不是和fn.legnth的长度相同
    if (fn.length <= args.length) {
      // 如果两者长度相同 那就直接返回这个函数的调用就好
      return fn(...args)
    }
    // 如果长度不相同 函数调用的时候 就将这个函数的参数拼接到返回的函数参数中
    return (...arg) => judge(...args, ...arg)
  }
  return judge
}


function curry (fn) {
  let judge = (...args) => {
    if (args.length >= fn.length) {
      return fn(...args)
    } else {
      return (...arg) => judge(...args, ...arg)
    }
  }
  return judge
}


// function add (a, b, c) {
//   return a + b + c
// }
// // console.log(add(1,2,3));
// let addCurry = curry(add)
// console.log(addCurry.toString());
// console.log(typeof addCurry(1));
function add (a, b, c) {
  return a * b + c
}
add(1, 2, 3)
let addCurry = curry(add)
console.log(addCurry(1)(2)(3));